package oc.tm.sg.admin.web.service;

import java.util.List;

import oc.tm.sg.admin.govern.domain.SgInvoke;
import oc.tm.sg.admin.govern.domain.SgInvokeLineChart;

public interface ChartsService {

	/**
     * 根据服务接口获取所有的方法列表
     * @param dubboInvoke
     * @return
     */
    public List<String> getMethodsByService(SgInvoke dubboInvoke);
    
    /**
     * 集成图表数据(当同时需要图一到图四的数据时,一次执行需要与DB交互的次数是基础的4倍,因此将一次查询的结果回收利用里减少与DB的交互次数)
     * @param dubboInvoke
     * @return
     */
    public List<SgInvokeLineChart> integrateData(SgInvoke dubboInvoke);
	
    /**
     * 图一：获取Provider和Consumer的QPS
     * 
     * @param invokeDateFrom:调用开始时间
     * @param invokeDateTo:调用结束时间
     * @param service:接口
     * @return Time---Provider的QPS、Consumer的QPS
     * @return
     */
    public List<SgInvokeLineChart> getQPS(SgInvoke dubboInvoke);
    
    /**
     * 图二：获取Provider和Consumer的平均响应耗时和最大响应耗时
     * 
     * @param invokeDateFrom:调用开始时间
     * @param invokeDateTo:调用结束时间
     * @param service:接口
     * @return Time---Provider平均响应耗时、Provider最大响应耗时、Consumer平均响应耗时、Consumer最大响应耗时
     */
    public List<SgInvokeLineChart> getAvgMaxRespTime(SgInvoke dubboInvoke);
    
    /**
     * 图三：获取Provider和Consumer的成功/失败笔数
     * 
     * @param invokeDateFrom:调用开始时间
     * @param invokeDateTo:调用结束时间
     * @param service:接口
     * @return Time---Provider成功笔数、Provider失败笔数、Consumer成功笔数、Consumer失败笔数
     */
    public List<SgInvokeLineChart> getSuccessFailureTimes(SgInvoke dubboInvoke);
    
    /**
     * 图四：获取Provider和Consumer的成功/失败率
     * 
     * @param invokeDateFrom:调用开始时间
     * @param invokeDateTo:调用结束时间
     * @param service:接口
     * @return Time---Provider成功率、Provider失败率、Consumer成功率、Consumer失败率
     */
    public List<SgInvokeLineChart> getSuccessFailureRate(SgInvoke dubboInvoke);
    
    
    
    /**
     * 图五：Consumer->Provider:Time---CP调度耗时最长TOP线路组合(RespTime—TOP)
     * <br>如果某个链路调用特别耗时,说明有故障需要排除
     * <br>组合：接口名称+方法名称+消费端IP+供应端IP+Consumer+耗时
     * @return
     */
    public List<SgInvokeLineChart> getCPRespTimeTOPN(SgInvoke dubboInvoke,Integer topn);
    
    /**
     * 图六：Consumer->Provider:Time---CP调度成功频繁TOP线路组合(RespNum-TOP)
     * <br>如果某个链路调用特别频繁,说明有故障需要排除
     * <br>组合：接口名称+方法名称+消费端IP+供应端IP+Consumer+成功笔数
     * @return
     */
    public List<SgInvokeLineChart> getCPRespSuccessNumTOPN(SgInvoke dubboInvoke,Integer topn);
    
    /**
     * 图七：Consumer->Provider:Time---CP调度失败频繁TOP线路组合(RespNum-TOP)
     * <br>如果某个链路调用特别频繁,说明有故障需要排除
     * <br>组合：接口名称+方法名称+消费端IP+供应端IP+Provider+失败笔数
     * @return
     */
    public List<SgInvokeLineChart> getCPRespFailureNumTOPN(SgInvoke dubboInvoke,Integer topn);
    
    
    //==========================汇总统计============
    
    /**
     * 图八：Consumer:Time---节点汇总后的最大响应耗时TOP服务
     * <br>组合：接口名称+方法名称+Consumer+Max+All+耗时
     * @return
     */
    public List<SgInvokeLineChart> getConsumerMaxElapsedTOPN(SgInvoke dubboInvoke,Integer topn);
    
    /**
     * 图九：Consumer:Time---节点汇总后的成功次数TOP服务(Success-TOP-N)
     * <br>组合：接口名称+方法名称+Consumer+All+成功笔数
     * @return
     */
    public List<SgInvokeLineChart> getConsumerSuccessNumTOPN(SgInvoke dubboInvoke,Integer topn);
    
    /**
     * 图十：Consumer:Time---节点汇总后的失败笔数TOP服务(Failure-TOP-N)
     * <br>组合：接口名称+方法名称+Consumer+All+失败笔数
     * @return
     */
    public List<SgInvokeLineChart> getConsumerFailureNumTOPN(SgInvoke dubboInvoke,Integer topn);
    
}
